package writtenTraining.day26;

import java.util.*;

/**
 * day27:(1)中心扩散：小红的ABC(时间上未通过)
 */



 class Main1 {
    public static void main(String[] args) {
        // 中心扩散
        //         输入
        Scanner in = new Scanner(System.in);
        char[] str = in.next().toCharArray();
        int len = str.length;

        int INF = 0x3f3f3f3f;
        int ret = INF;
        for(int i = 0; i < len; i++) {
            int t = check(str,i);
            if(t > 1)
                ret = Math.min(ret,t);
//             System.out.println("i:" + i + " t: " + t);
        }

        // 输出
        System.out.println(ret == INF ? -1 : ret);
    }

    public static int check(char[] str, int i) {
        int left = i ,right = i;
        int ret = 0, len = str.length;
//         奇数
        while(left >= 0 && right <  len) {
            if(str[left] == str[right]) {
//             每次都进行统计
                ret = Math.max(ret,right - left + 1);
                left--;
                right++;
            } else {
                break;
            }
        }

        left = i ; right = i + 1;
//         偶数
        while(left >= 0 && right <  len) {
            if(str[left] == str[right]) {
                //  每次都进行统计
                ret = Math.max(ret,right - left + 1);
                left--;
                right++;

            } else {
                break;
            }

        }

        return ret;
    }
}

/**
 * day27:(1)找规律：遍历所有的最小回文串的情况：小红的ABC
 */

 class Main2 {
    public static void main(String[] args) {
        // 中心扩散
        //         输入
        Scanner in = new Scanner(System.in);
        String str = in.next();
        String[] tar = {"aa","bb","cc",
                "bab","aba",
                "cac","aca",
                "cbc", "bcb"};
        for(int i = 0; i < 9; i++) {
            if(str.contains(tar[i])) {
                System.out.println(tar[i].length());
                return;
            }
        }

        // 输出
        System.out.println(-1);
    }
}

/**
 * day26:(2)动态规划：DP23 不相邻取数
 */
public class Main {
    public static void main(String[] args) {
        // 动态规划
        // 两种状态的dp
        // 输入数据
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] dp =new int[n+1][2];

        // 填表
        for(int i = 1; i <= n; i++) {
            // 得到取
            dp[i][0] = dp[i-1][1] + in.nextInt();

            // 得到不取
            dp[i][1] = Math.max(dp[i-1][0],dp[i-1][1]) ;   
        }

        // 输出结果
        System.out.println(Math.max(dp[n][1] , dp[n][0]));
    }
}


/**
 * day27:(3）排序 + 二分：空调遥控
 */


 class Main3 {
    public static void main(String[] args) {
//         排序 + 二分
//        从端点来确定区间
//        因为是排序了的， 所有中间的元素是跑不了的
        //         输入数据
        Scanner in = new Scanner(System.in);

        int n = in.nextInt(), k = in.nextInt();
        int[] nums =new  int[n];
        for(int i =0; i < n; i++) {
            nums[i] = in.nextInt();
        }

        // 排序
        Arrays.sort(nums);


        int ret = 0;
//         枚举所有的情况
        for(int i = 0; i < n; i++) {
//             获取左右端点
            int begin = nums[i] - k,
                    end = nums[i] + k;
            int left = 0, right = n - 1;
            // 二分
//             查找左端点的右区域
            while(left < right) {
                int mid = left + (right - left) / 2;
                if(nums[mid] < begin) {
                    left = mid + 1;
                } else {
                    right = mid;
                }
            }

//             右端点的左区域
            int n1 = right;
            left = 0; right = n - 1 ;
            while(left < right) {
                int mid = left + (right - left + 1) / 2;
                if(nums[mid] > end) {
                    right = mid - 1;
                } else {
                    left = mid;
                }
            }

            ret = Math.max(ret, left - n1 + 1);
        }

        // 输出结果
        System.out.println(ret);
    }


}


